package net.maku.events.service;

import net.maku.events.entity.UserPointsRecordsEntity;
import net.maku.events.query.ActivityRankQuery;
import net.maku.events.query.UserPointsRecordsQuery;
import net.maku.events.vo.RankMemberUserVO;
import net.maku.events.vo.RankOrgVO;
import net.maku.events.vo.UserPointsRecordsVO;
import net.maku.events.vo.UserSnapshotVO;
import net.maku.framework.common.utils.PageResult;
import net.maku.framework.mybatis.service.BaseService;

import java.util.List;
import java.util.Map;

/**
 * @Author: qr
 * @Date: 2025/3/25 22:51
 * @Version 1.0
 */
public interface UserPointsRecordsService extends BaseService<UserPointsRecordsEntity> {

    /**
     * 查找用户用户积分记录
     *
     * @param query 查询条件
     * @return
     */
    PageResult<UserPointsRecordsVO> page(UserPointsRecordsQuery query);

    /**
     * 查看用户积分的详情
     *
     * @return
     */
    Map<String, Double> userPoint();

    /**
     * 获取个人排行榜
     *
     * @param query 查询条件
     * @return 结果
     */
    RankMemberUserVO userSelfRank(ActivityRankQuery query);

    /**
     * 获取活动排行榜
     *
     * @param businessId   活动id
     * @param businessType 活动类型
     * @param todayFlag    是否今日
     * @return 结果
     */
    List<RankMemberUserVO> getRank(Long businessId
            , Integer businessType, boolean todayFlag);

    /**
     * 分页查询排行榜
     *
     * @param query 查询条件
     * @return 结果
     */
    PageResult<RankMemberUserVO> getRankPage(ActivityRankQuery query);

    /**
     * 获取活动单位排行榜
     *
     * @param businessId   活动id
     * @param businessType 活动类型
     * @return 结果
     */
    List<RankOrgVO> getRankOrg(Long businessId
            , Integer businessType);

    /**
     * 添加积分记录
     *
     * @param businessId   业务id
     * @param businessType 业务类型
     * @param points       积分
     * @param whetherAdd   是否是增加
     */
    void insertUserPointsRecords(Long businessId
            , Integer businessType, Double points, Integer whetherAdd);


}
